package br.inf.mfpo.fra4and.exemplo.provider;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import br.inf.mfpo.fra4and.exemplo.columns.CoisasColumns;
import br.inf.mfpo.fra4and.exemplo.columns.PessoasColumns;

public abstract class DatabaseMetadata extends SQLiteOpenHelper {
	protected static final String DATABASE_NAME = "fra4and_exemplo.db";
	protected static final int DATABASE_VERSION = 1;

	protected static final String PESSOAS_TABLE = "pessoas";
	protected static final String COISAS_TABLE = "coisas";
	
	// ############## TABLES ##############
	protected static final String CREATE_TABLE_PESSOAS = "CREATE TABLE " 
		+ PESSOAS_TABLE + "(" 
		+ PessoasColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
		+ PessoasColumns.NOME + " TEXT, "
		+ PessoasColumns.SEXO + " INTEGER" 
		+ ");";

	protected static final String CREATE_TABLE_COISAS = "CREATE TABLE " 
		+ COISAS_TABLE + "(" 
		+ CoisasColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
		+ CoisasColumns.PESSOAS_ID + " INTEGER, "
		+ CoisasColumns.NOME + " TEXT, " 
		+ CoisasColumns.DATA_AQUISICAO + " INTEGER"
		+ ");";

	// ############## INDEXES ##############
	protected static final String CREATE_IDX_PESSOAS_NAME = "CREATE INDEX " 
		+ "idx_".concat(PESSOAS_TABLE) + "_".concat(PessoasColumns.NOME) 
		+ " ON " + PESSOAS_TABLE + " (" + PessoasColumns.NOME
		+ " ASC);";

	protected static final String CREATE_IDX_COISAS_NAME = "CREATE INDEX " 
		+ "idx_".concat(COISAS_TABLE) + "_".concat(CoisasColumns.NOME) 
		+ " ON " + COISAS_TABLE + " (" + CoisasColumns.NOME
		+ " ASC);";
	
	// ############## VIEWS ##############

	// ############## TRIGGERS ##############
	protected static final String CREATE_TRG_DELETE_PESSOAS_COISAS = "CREATE TRIGGER "
		+ "trg_delete_".concat(PESSOAS_TABLE) + "_".concat(COISAS_TABLE) 
		+ " BEFORE DELETE ON " + PESSOAS_TABLE
		+ " FOR EACH ROW BEGIN DELETE FROM " + COISAS_TABLE
		+ " WHERE " + COISAS_TABLE + "." + CoisasColumns.PESSOAS_ID + " = OLD." + PessoasColumns._ID 
		+ "; END;";


	public DatabaseMetadata(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
	}
	
	@Override
	public abstract void onCreate(SQLiteDatabase db);

	@Override
	public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

}
